﻿using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace DKPScoreWebApi.Models
{
    /// <summary>
    /// 工会成员实体类
    /// 代表工会中的单个玩家角色
    /// </summary>
    public class GuildMember
    {
        /// <summary>
        /// 成员ID，主键，自增
        /// </summary>
        [Key]
        public int Id { get; set; }

        /// <summary>
        /// 所属工会ID，外键关联Guild
        /// </summary>
        [Required]
        public int GuildId { get; set; }

        /// <summary>
        /// 成员名称（游戏角色名），必填字段
        /// </summary>
        [Required]
        [MaxLength(100)]
        public string Name { get; set; }

        /// <summary>
        /// 角色职业，如战士、法师等
        /// </summary>
        [MaxLength(50)]
        public string CharacterClass { get; set; }

        /// <summary>
        /// 角色等级，默认为1级
        /// </summary>
        public int CharacterLevel { get; set; } = 1;

        /// <summary>
        /// 团队角色，如Tank(坦克)、Healer(治疗)、DPS(输出)
        /// </summary>
        [MaxLength(50)]
        public string Role { get; set; }

        /// <summary>
        /// 加入工会日期
        /// </summary>
        public DateTime? JoinDate { get; set; }

        /// <summary>
        /// 成员状态，true表示活跃，false表示已离开
        /// </summary>
        public bool IsActive { get; set; } = true;

        /// <summary>
        /// 成员创建时间
        /// </summary>
        public DateTime CreatedAt { get; set; } = DateTime.Now;

        // 导航属性
        /// <summary>
        /// 所属工会信息
        /// </summary>
        [ForeignKey("GuildId")]
        public virtual Guild Guild { get; set; }

        /// <summary>
        /// 成员的积分记录列表
        /// </summary>
        public virtual ICollection<PointRecord> PointRecords { get; set; }

        /// <summary>
        /// 成员的进度记录列表
        /// </summary>
        public virtual ICollection<MemberProgress> Progresses { get; set; }

        // 计算属性
        /// <summary>
        /// 成员总积分（非数据库字段，计算得出）
        /// </summary>
        [NotMapped]
        public int TotalPoints { get; set; }
    }
}
